/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.urca.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 *
 * @author Lucas
 */
@Entity
@Table(name = "BI_MATERIAIS")
public class BiMateriais implements Serializable {
    
	private static final long serialVersionUID = 1L;
	
	@EmbeddedId
    protected BiMateriaisPK biMateriaisPK;
    
	@Column(name = "ARTIGO")
    private String artigo;
    
    @Column(name = "TITULO")
    private String titulo;

    @Column(name = "SUB_TITULO")
    private String subTitulo;
    
    @Column(name = "EDICAO")
    private Short edicao;
    
    @Column(name = "PAGINAS")
    private Short paginas;
    
    @Column(name = "ANO_PUBLICACAO")
    private Short anoPublicacao;
    
    @Column(name = "COD_IDIOMA")
    private Short codIdioma;
    
    @Column(name = "COD_CIDADE")
    private Short codCidade;
    
    @Column(name = "COD_EDITORA")
    private Integer codEditora;
    
    @Column(name = "COD_SERIE")
    private Short codSerie;
    
    @Column(name = "ISBN")
    private String isbn;
    
    @Column(name = "ISSN")
    private String issn;
    
    @Column(name = "CUTTER")
    private String cutter;
    
    @Column(name = "CDD")
    private String cdd;
    
    @Column(name = "CLASSIFICACAO")
    private String classificacao;
    
    @Column(name = "PERIODICIDADE")
    private Character periodicidade;

    @Column(name = "TIPO")
    private Character tipo;

    @Column(name = "ORIGEM")
    private Character origem;

    @Column(name = "RARO")
    private Character raro;

    @Column(name = "NIVEL_SIGILO")
    private Short nivelSigilo;
    
    @Lob
    @Column(name = "NOTAS")
    private String notas;
   
    @Column(name = "ORIENTADOR")
    private String orientador;
    
    @Column(name = "AREA")
    private String area;
    
    @Column(name = "TITULO_COMPLETO")
    private String tituloCompleto;

    @JoinColumn(name = "COD_ESTADO", referencedColumnName = "SIGLA")
    @ManyToOne
    private GeEstados codEstado;
    
    @JoinColumn(name = "COD_CURSO", referencedColumnName = "cdcur")
    @ManyToOne
    private Curso codCurso;
    
    @JoinColumns({
        @JoinColumn(name = "COD_TIPO_MATERIAL", referencedColumnName = "COD_TIPO_MATERIAL", insertable = false, updatable = false, nullable = true),
        @JoinColumn(name = "COD_NUMERO_MATERIAL", referencedColumnName = "COD_NUMERO_MATERIAL", insertable = false, updatable = false, nullable = true)})
    @OneToMany(fetch = FetchType.EAGER)
    private List<BiAutoresMateriais> autores;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "biMateriais", fetch = FetchType.EAGER)
    private List<BiCopias> biCopiasList;
    
    @Transient
    private String descricaoTipo;
    
    @Transient
    private String descricaoOrigem;
    
    @Transient
    private String descricaoPeriodicidade;
        
    public BiMateriais() {
    }

    public BiMateriais(BiMateriaisPK biMateriaisPK) {
        this.biMateriaisPK = biMateriaisPK;
    }

    public BiMateriais(BiMateriaisPK biMateriaisPK, String titulo, Character periodicidade, Character tipo, Character origem, Character raro, String tituloCompleto) {
        this.biMateriaisPK = biMateriaisPK;
        this.titulo = titulo;
        this.periodicidade = periodicidade;
        this.tipo = tipo;
        this.origem = origem;
        this.raro = raro;
        this.tituloCompleto = tituloCompleto;
    }

    public BiMateriais(Character codTipoMaterial, int codNumeroMaterial) {
        this.biMateriaisPK = new BiMateriaisPK(codTipoMaterial, codNumeroMaterial);
    }

    public List<BiCopias> getBiCopiasList() {
		return biCopiasList;
	}

	public void setBiCopiasList(List<BiCopias> biCopiasList) {
		this.biCopiasList = biCopiasList;
	}

	public BiMateriaisPK getBiMateriaisPK() {
        return biMateriaisPK;
    }

    public void setBiMateriaisPK(BiMateriaisPK biMateriaisPK) {
        this.biMateriaisPK = biMateriaisPK;
    }

    public String getArtigo() {    	    	
    	if (artigo == null)
    		return "";
    	switch (artigo) {
			case "1": return "A";
			case "2": return "AS";
			case "3": return "O";
			case "4": return "OS";
			case "5": return "UM";
			case "6": return "UNS";
			case "7": return "UMA";
			case "8": return "UMAS";		
				
			default: return ""; 
		}
        //return artigo;
    }

    public String getDescricaoTipo() {
		switch (String.valueOf(this.tipo)) {
			case "C": this.descricaoTipo = "Científico"; break;
			case "A": this.descricaoTipo =  "Acadêmico"; break;	
			case "G": this.descricaoTipo = "Generalidade"; break;
			default: this.descricaoTipo = ""; break;
		}
		return this.descricaoTipo;
	}
    
	public String getDescricaoPeriodicidade() {
		switch (String.valueOf(this.periodicidade)) {
			case "A": this.descricaoPeriodicidade = "Diário"; break;
			case "B": this.descricaoPeriodicidade = "Semanal"; break;
			case "C": this.descricaoPeriodicidade = "Quizenal"; break;
			case "D": this.descricaoPeriodicidade = "Mensal"; break;
			case "E": this.descricaoPeriodicidade = "Bimestral"; break;
			case "F": this.descricaoPeriodicidade = "Trimestral"; break;
			case "G": this.descricaoPeriodicidade = "Quadrimestral"; break;
			case "H": this.descricaoPeriodicidade = "Semestral"; break;
			case "I": this.descricaoPeriodicidade = "Anual"; break;
			case "J": this.descricaoPeriodicidade = "3/3"; break;
			case "K": this.descricaoPeriodicidade = "10/10"; break;
			case "L": this.descricaoPeriodicidade = "Irregular"; break;
			default:this.descricaoPeriodicidade = ""; break;
		}
		return this.descricaoPeriodicidade;
	}

	public void setDescricaoPeriodicidade(String descricaoPeriodicidade) {
		this.descricaoPeriodicidade = descricaoPeriodicidade;
	}

	public String getDescricaoOrigem() {
		switch (String.valueOf(this.origem)) {
			case "N": this.descricaoOrigem = "Nacional"; break;
			case "E": this.descricaoOrigem =  "Estrangeiro"; break;	
			default: this.descricaoOrigem = ""; break;
		}
		return this.descricaoOrigem;
	}
	
	public void setDescricaoTipo(String descricaoTipo) {
		this.descricaoTipo = descricaoTipo;
	}

	public void setDescricaoOrigem(String descricaoOrigem) {
		this.descricaoOrigem = descricaoOrigem;
	}

	public void setArtigo(String artigo) {
        this.artigo = artigo;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getSubTitulo() {
        return subTitulo;
    }

    public void setSubTitulo(String subTitulo) {
        this.subTitulo = subTitulo;
    }

    public Short getEdicao() {
        return edicao;
    }

    public void setEdicao(Short edicao) {
        this.edicao = edicao;
    }

    public Short getPaginas() {
        return paginas;
    }

    public void setPaginas(Short paginas) {
        this.paginas = paginas;
    }

    public Short getAnoPublicacao() {
        return anoPublicacao;
    }

    public void setAnoPublicacao(Short anoPublicacao) {
        this.anoPublicacao = anoPublicacao;
    }

    public Short getCodIdioma() {
        return codIdioma;
    }

    public void setCodIdioma(Short codIdioma) {
        this.codIdioma = codIdioma;
    }

    public Short getCodCidade() {
        return codCidade;
    }

    public void setCodCidade(Short codCidade) {
        this.codCidade = codCidade;
    }

    
    public Integer getCodEditora() {
        return codEditora;
    }

    public void setCodEditora(Integer codEditora) {
        this.codEditora = codEditora;
    }

	public Short getCodSerie() {
        return codSerie;
    }

    public void setCodSerie(Short codSerie) {
        this.codSerie = codSerie;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getIssn() {
        return issn;
    }

    public void setIssn(String issn) {
        this.issn = issn;
    }

    public String getCutter() {
        return cutter;
    }

    public void setCutter(String cutter) {
        this.cutter = cutter;
    }

    public String getCdd() {
        return cdd;
    }

    public void setCdd(String cdd) {
        this.cdd = cdd;
    }

    public String getClassificacao() {
        return classificacao;
    }

    public void setClassificacao(String classificacao) {
        this.classificacao = classificacao;
    }

    public Character getPeriodicidade() {
        return periodicidade;
    }

    public void setPeriodicidade(Character periodicidade) {
        this.periodicidade = periodicidade;
    }

    public Character getTipo() {
        return tipo;
    }

    public void setTipo(Character tipo) {
        this.tipo = tipo;
    }

    public Character getOrigem() {
        return origem;
    }

    public void setOrigem(Character origem) {
        this.origem = origem;
    }

    public Character getRaro() {
        return raro;
    }

    public void setRaro(Character raro) {
        this.raro = raro;
    }

    public Short getNivelSigilo() {
        return nivelSigilo;
    }

    public void setNivelSigilo(Short nivelSigilo) {
        this.nivelSigilo = nivelSigilo;
    }

    public String getNotas() {
        return notas;
    }

    public void setNotas(String notas) {
        this.notas = notas;
    }

    public String getOrientador() {
        return orientador;
    }

    public void setOrientador(String orientador) {
        this.orientador = orientador;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getTituloCompleto() {
        return tituloCompleto;
    }

    public void setTituloCompleto(String tituloCompleto) {
        this.tituloCompleto = tituloCompleto;
    }

    public GeEstados getCodEstado() {
        return codEstado;
    }

    public void setCodEstado(GeEstados codEstado) {
        this.codEstado = codEstado;
    }

    public Curso getCodCurso() {
        return codCurso;
    }

    public void setCodCurso(Curso codCurso) {
        this.codCurso = codCurso;
    }    
    
    public List<BiAutoresMateriais> getAutores() {
		return autores;
	}

	public void setAutores(List<BiAutoresMateriais> autores) {
		this.autores = autores;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((biMateriaisPK == null) ? 0 : biMateriaisPK.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		BiMateriais other = (BiMateriais) obj;
		if (biMateriaisPK == null) {
			if (other.biMateriaisPK != null)
				return false;
		} else if (!biMateriaisPK.equals(other.biMateriaisPK))
			return false;
		return true;
	}
	
	@Override
    public String toString() {
        return "model.BiMateriais[ biMateriaisPK=" + biMateriaisPK + " ]";
    }
    
}
